"""
字符串驻留机制：

"""
s3 = 'hell'
s4 = 'o'
s5 = s3 + s4  # 非自动驻留
s1 = 'hello'  # 自动驻留
print(id(s1) == id(s5))
print(id(s1) is id(s5))
print(id(s1) == id(s3 + s4))
'''
字符串的切片：
    start:end
        包前不包后。
        start 省略相当于 0
        end 省略相当于包含到最后。
        [:] 全部省略相当于原字符串，指向相同内存地址。
    start:end:step
        [::] 全部省略相当于原字符串，指向相同的内存地址。
'''
ss = 'ABCDEFG'
print(ss[1])
print(ss[1:4])
print(ss[-1])
print(ss[:3])
print(ss[:-1])
print(ss[2:])
print(ss[:])
print(len(ss))
print('ss is ss[:]=%s'%(ss is ss[:]))
print(ss[::])
print(ss[1:6:2])
print(ss[1:6:-2])
print(ss[6:1:-2])  # 逆向
print(ss[::-1])  # 字符串反转
'''
字符串的查找：
    find：从左往右找，只要遇到一个符合要求的则返回index。如果没有找到任何符合要求的则返回-1。
    rfind：从右往左找。
    count：统计指定字符的个数。
    index 与 find 区别：
        index找不到会报错。
        index只能查找单个字符。
'''
print(ss.find('D'))
print(ss.rfind('D'))
print(ss.index('D'))
print(ss.find('CD'))
'''
字符串的判断：
    startswith、endswith、isalpha、isdigit、isalnum、isspace等：返回值都是布尔类型的（True、False）。
'''
print(ss.startswith('A'))
print(ss.endswith('G'))
print(ss.isalpha())  # 是否全部由字母组成。包含数字不行，比如：A123，存在数字，那就不行。
print(ss.isdigit())  # 是否全部由数字组成，包含字母不行。
print(ss.isalnum())  # 是否全部由数字和字母组成。包含特殊符号不行，比如：A123#，存在特殊符号，那就不行。
print(ss.isspace())  # 是否全部由空格组成。
'''
    字符串的空格处理：
        ljust、rjust、center、lstrip、rstrip、strip。
'''
ss2 = ' AB   '
print(len(ss2))
print(len(ss2.strip()))
ss3 = 'zyx'
print(ss3.center(30))
print(ss3.center(30, '*'))
print(ss3.ljust(30, '*'))
print(ss3.rjust(30, '*'))
'''
字符串的格式化：
    format
'''
print('我是{}，年龄{}'.format('张三', 18))
print('我是{0}，年龄{1}，年龄{1}'.format('张三', 18))
name, age = '张三', 18
print('我是{name}，年龄{age}'.format(age=age, name=name))  # 要用关键字参数
print('我是{name}，年龄{age}'.format(age=20, name='zyx'))
